OPT= -c -g -std=c++0x -Wall 
OUTPUT=a.exe
GCC=g++

query=./query
grammar=./grammar
utility=./utility
lexical=./lexical

OBJ= main.o $(utility)/utility.o $(grammar)/GrammarExpression.o $(query)/query.o $(lexical)/lexical.o $(lexical)/automaton.o $(lexical)/identity.o
RM=rm

$(OUTPUT): $(OBJ)
	$(GCC) $(OBJ) -o $(OUTPUT)

main.o:main.cpp
	$(GCC) $(OPT) main.cpp

$(utility)/utility.o:$(utility)/utility.h $(utility)/utility.cpp
	$(GCC) $(OPT) $(utility)/utility.cpp -o $(utility)/utility.o

$(grammar)/GrammarExpression.o:$(grammar)/GrammarExpression.h $(grammar)/GrammarExpression.cpp
	$(GCC) $(OPT) $(grammar)/GrammarExpression.cpp -o $(grammar)/GrammarExpression.o

$(query)/query.o:$(query)/query.h $(query)/query.cpp
	$(GCC) $(OPT) $(query)/query.cpp -o $(query)/query.o

$(lexical)/lexical.o:$(lexical)/lexical.h $(lexical)/lexical.cpp
	$(GCC) $(OPT) $(lexical)/lexical.cpp -o $(lexical)/lexical.o

$(lexical)/automaton.o:$(lexical)/automaton.h $(lexical)/automaton.cpp
	$(GCC) $(OPT) $(lexical)/automaton.cpp -o $(lexical)/automaton.o

$(lexical)/identity.o:$(lexical)/identity.h $(lexical)/identity.cpp
	$(GCC) $(OPT) $(lexical)/identity.cpp -o $(lexical)/identity.o

clean:
	$(RM) $(OBJ) $(OUTPUT)
